<?php
declare(strict_types=1);

namespace Zms\AdminElementPlus;

use Zms\Unit\Arr;
use Zms\Unit\Is;

abstract class ElementAbstract
{

    /**
     * @var array 额外属性
     */
    protected array $_props = [

    ];


    /**
     * 表单默认值
     * @return array
     */
    protected function defaultProps(): array
    {
        return [];
    }


    /**
     * 表单默认值
     * @return array
     */
    protected function getProps(): array
    {
        return Arr::merge($this->defaultProps(), $this->_props);
    }


    /**
     * 转化属性
     * @return array
     */
    public function toArray(): array
    {
        $param = [];
        foreach (get_object_vars($this) as $field => $value) {
            if (str_starts_with($field, '_') === true) {
                $field = substr($field, 1);
                if ($field === 'props') {
                    $value = $this->getProps();
                }
                if (!(is_array($value) || is_string($value))) {
                    if (Is::empty($value)) continue;
                }
                $param[$field] = $value;
            }
        }
        return $param;
    }
}